﻿<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>
        MetodoAuditoria        
      </Title>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>NombreMetodo</ID>
          <ToolTip>Nombre Método</ToolTip>
          <Default>NombreMetodo</Default>
        </Literal>
        <Literal>
          <ID>NombreContexto</ID>
          <ToolTip>Nombre Contexto</ToolTip>
          <Default>NombreContexto</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">

        <![CDATA[
      private void $NombreMetodo$(object sender, EventArgs e)
        {
            try
            {
                bool isAuditoriaDetelle = Convert.ToBoolean(ConfigurationManager.AppSettings["AuditoriaDetalle"]);

                IEnumerable<ObjectStateEntry> cambios =
                    ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted |
                                                             EntityState.Modified);

                var servicio = new ServicioClienteClient(new BasicHttpContextBinding(), new EndpointAddress(Recursos.UrlServicioCliente.ToString()));
                var dato = servicio.DatosUsuario();
                string nombreUsuario = dato[0];
                string ip = dato[1];
                var lista = new List<object>();
                var contexto = new $NombreContexto$();
                foreach (ObjectStateEntry stateEntryEntity in cambios)
                {
                    if (!stateEntryEntity.IsRelationship &&
                        stateEntryEntity.Entity != null &&
                        !(stateEntryEntity.Entity is Auditoria))
                    {
                        if (stateEntryEntity.State!=EntityState.Added )
                        {
                            var key = stateEntryEntity.EntityKey;
                            var objeto = contexto.GetObjectByKey(key);
                            lista.Add(objeto);    
                        }
                    }
                }

                try
                {
                    AuditoriaBase.Procesar(this, lista, isAuditoriaDetelle, nombreUsuario, ip, string.Empty);
                }
                catch (Exception ex)
                {
                    AuditoriaBase.Procesar(this, lista, isAuditoriaDetelle, nombreUsuario, ip, ex.Message);
                }

            }
            catch (Exception excepcion)
            {

                ControladorExcepciones.Procesar(excepcion);
            }
        }
        
        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>